package chapter_04_singleton.p4_double_check_singleton;

/**
 * Created by CharloYao on 2017/3/23.
 * 双重检查加锁；
 */
public class DoubleCheckSingleton {

    private DoubleCheckSingleton(){};

    /**
     * 重点： volatile关键字；java1.5以上版本才支持
     */
    private volatile static DoubleCheckSingleton singleton = null;

    public static DoubleCheckSingleton getInstance(){
        //先检查实例是否存在，不存在的话才进入代码同步块
        if(singleton == null){
            //同步块，线程安全的创建实例
            synchronized (DoubleCheckSingleton.class){
                //再次检查实例是否存在，不存在的话才真正的创建实例
                if(singleton == null){
                    singleton = new DoubleCheckSingleton();
                }
            }
        }
        return singleton;
    }
}
